package br.unifor.cg.algoritmos;

import br.unifor.cg.formas.Ponto;

/**
 * Classe que implementa o algoritmo de DDA
 *
 */
public class DDA extends Algoritmo{
	
	/**
	 * Metodo foi sobrescrito para utilizar o algoritmo de DDA
	 */
	public void desenhaLinha(Ponto pInicial, Ponto pFinal) {
		double tamanho = 0;
		double deltaX, deltaY = 0;
		if (Math.abs(pFinal.getX() - pInicial.getX()) >= Math.abs(pFinal.getY() - pInicial.getY())) {
			tamanho = Math.abs(pFinal.getX() - pInicial.getX());
		} else {
			tamanho = Math.abs(pFinal.getY() - pInicial.getY());
		}
		deltaX = (pFinal.getX() - pInicial.getX()) / tamanho;
		deltaY = (pFinal.getY() - pInicial.getY()) / tamanho;
		int i = 0;
		double x = pInicial.getX();
		double y = pInicial.getY();
		
		while (i <= tamanho) {
			desenhaPonto((int) Math.round(x), (int) Math.round(y));
			x += deltaX;
			y += deltaY;
			i++;
		}
	}
}
